Data 수정
✒️ 2025-05-28 16:35 내용 수정
DML을 이용한 데이터 다루기
- SQL 편집기 작동은 DBeaver#단축키 참고
- DML(Data Manipulation Language), DQL(Data Query Language)과 키워드#DQL과 DML에서 사용하는 표현들 참고
- HR에서 제공하는 기본 테이블들을 이용하면 쉽게 데이터 검색 연습을 할 수 있다.
1. 데이터 삽입
INSERT INTO 테이블명(컬럼명1, 컬럼명2,...) VALUES(값1, 값2,...);
INSERT INTO 테이블명 VALUES(값1, 값2,...); -- 무조건 컬럼 개수만큼 값을 넣어야 함
1) 일반 테이블
- 다음과 같은 컬럼과 제약 조건을 가진 테이블에 데이터를 넣어본다.
CREATE TABLE COMPUTER(
ID NUMBER CONSTRAINT IN_PK PRIMARY KEY,
NAME VARCHAR2(100),
OS VARCHAR2(100),
"POWER" CHAR(1) DEFAULT 'O' NOT NULL CONSTRAINT POWER_CHECK CHECK("POWER"='O' OR "POWER"='X'),
STARTDATE DATE CONSTRAINT START_DATE CHECK(STARTDATE >= TO_DATE('2023-10-25', 'YYYY-MM-DD')),
CONSTRAINT NAME_UN UNIQUE (NAME)
);
- 제약 조건에 맞지 않는 데이터는 추가할 수 없다.(제약 조건 에러가 뜬다.)
/* START_DATE 제약 조건이 맞지 않아 데이터를 추가할 수 없다.
INSERT INTO COMPUTER(ID, NAME, OS, "POWER", STARTDATE)
VALUES (1, MYPC, WINDOWS, O, TO_DATE('2021-03-23', 'YYYY-MM-DD'));
*/
- 테이블에 데이터를 추가한다.
INSERT INTO COMPUTER(ID, NAME, OS, "POWER", STARTDATE)
VALUES (1, 'PC', 'WINDOWS', 'O', TO_DATE('2023-11-05', 'YYYY-MM-DD'));
- PRIMARY KEY가 중복된 데이터는 추가할 수 없다.
/* 같은 ID를 가진 데이터는 추가할 수 없다.
INSERT INTO COMPUTER(ID, NAME, OS, "POWER", STARTDATE)
VALUES (1, 'PC2', 'LINUX', 'X', TO_DATE('2023-11-25', 'YYYY-MM-DD'));
*/
- PRIMARY KEY가 중복되지 않게 데이터를 추가해야 한다.
INSERT INTO COMPUTER(ID, NAME, OS, "POWER", STARTDATE)
VALUES (2, 'PC2', 'LINUX', 'X', TO_DATE('2023-11-25', 'YYYY-MM-DD'));
- DEFAULT 값을 넣을 컬럼의 이름을 제외하면 해당 컬럼은 DEFAULT 값을 넣고, 나머지 컬럼에는 지정한 값을 넣는다.
-- "POWER"에 DEFAULT 값을 넣고 데이터를 추가한다.
INSERT INTO COMPUTER(ID, NAME, OS, STARTDATE)
VALUES (3, 'HOME', 'MAC', TO_DATE('2023-12-17', 'YYYY-MM-DD'));
- 컬럼명을 생략하는 대신 컬럼 개수와 무조건 동일한 값을 넣어 데이터를 추가할 수 있다.
-- 컬럼명을 생략하고, 컬럼 개수에 맞는 데이터를 작성해서 데이터를 추가한다.
INSERT INTO COMPUTER
VALUES (4, 'WORK', 'CENTOS', 'X', TO_DATE('2023-10-30', 'YYYY-MM-DD'));
2) FK가 있는 테이블
- 아래와 같은 테이블들을 생성하고 데이터를 넣어본다.
-- 학생 테이블 생성
CREATE TABLE STUDENT(
ID NUMBER PRIMARY KEY,
STD_NAME VARCHAR2(100),
STD_GRADE NUMBER,
STD_PW VARCHAR2(100),
STD_MAJOR VARCHAR2(100),
STD_SCORE NUMBER
);
-- 수업 수강인원 테이블 생성
CREATE TABLE CLASS(
ID VARCHAR2(100) PRIMARY KEY,
CLASS_ROOM NUMBER,
PROFESSOR VARCHAR2(100),
STD_ID NUMBER,
CONSTRAINT STD_FK FOREIGN KEY(STD_ID) REFERENCES STUDENT(ID)
);
- 데이터를 추가할 때 참조할 PK(고유키)가 있는 테이블(부모 테이블)에 데이터를 먼저 넣고, 그 다음 FK(외래키)가 있는 테이블(자식 테이블)에 데이터를 넣어야 한다.
-- 부모 테이블에 데이터 추가
INSERT INTO STUDENT
VALUES(2020372035, '홍길동', 2, 'PASSWORD123', '전자공학과', 87);
-- 자식 테이블에 데이터 추가()
INSERT INTO CLASS
VALUES(1, 154, '김교수', 2020372035);
2. 데이터 수정
UPDATE 테이블명 SET 기존컬럼명 = 새로운값; -- 해당 컬럼 전체 변경
UPDATE 테이블명 SET 기존컬럼명 = 새로운값 WHERE 조건식; -- 조건에 맞는 컬럼만 변경
- Resources/DataBase/RDBMS/Oracle/Data 수정#1. 데이터 삽입에서 사용한 테이블에 다음과 같은 데이터가 들어 있다.
INSERT INTO STUDENT
VALUES(2020372035, '홍길동', 2, 'PASSWORD123', '전자공학과', 87);
INSERT INTO STUDENT
VALUES(2019372013, '고길동', 3, '321DROWSSAP', '물리학과', 92);
INSERT INTO STUDENT
VALUES(202032001, '유성', 2, '3PAS2SWO1RD', '기계공학과', 75);
INSERT INTO CLASS
VALUES(1, 154, '김교수', 2020372035);
INSERT INTO CLASS
VALUES(2, 200, '최교수', 2019372013);
- 학생들의 전공을 모두 "전자공학과"로 수정한다.
UPDATE STUDENT
SET STD_MAJOR = '전자공학과';
- "유성" 학생의 점수를 100으로 수정한다.
UPDATE STUDENT
SET STD_SCORE = 100
WHERE STD_NAME = '유성';
3. 데이터 삭제
DELETE FROM 테이블명 WHERE 조건식;
- Resources/DataBase/RDBMS/Oracle/Data 수정#2. 데이터 수정에서 사용한 테이블을 이용한다.
- "고길동" 학생의 데이터를 STUDENT와 CLASS 테이블에서 제거한다.
- CLASS는 STUDENT의 ID(PK)를 STD_ID(FK)로 참조했기 때문에 먼저 CLASS에서 데이터를 지워야 한다.
DELETE FROM CLASS WHERE STD_ID = 2019372013; -- CLASS 테이블에서 데이터 제거
DELETE FROM STUDENT WHERE ID = 2019372013; -- STUDENT 테이블에서 데이터 제거